package main

import "fmt"

type Base struct{}

func (Base) magic() {
	fmt.Println("base magic")
}

func (self Base) moreMagic() {
	self.magic()
	self.magic()
}

type Voodoo struct {
	Base
}

func (Voodoo) magic() {
	fmt.Println("voodoo Magic")
}

func main() {
	v := new(Voodoo)
	v.magic()
	v.Base.magic()
	fmt.Println("==========")
	v.moreMagic()
	// output:
	// voodoo Magic
	// base magic
	// base magic
}
